// Copyright 2015 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "src/interpreter/interpreter-intrinsics.h"

#include "src/base/logging.h"

namespace v8 {
namespace internal {
    namespace interpreter {

        // static
        bool IntrinsicsHelper::IsSupported(Runtime::FunctionId function_id)
        {
            switch (function_id) {
#define SUPPORTED(name, lower_case, count) case Runtime::kInline##name:
                INTRINSICS_LIST(SUPPORTED)
                return true;
#undef SUPPORTED
            default:
                return false;
            }
        }

        // static
        IntrinsicsHelper::IntrinsicId IntrinsicsHelper::FromRuntimeId(
            Runtime::FunctionId function_id)
        {
            switch (function_id) {
#define TO_RUNTIME_ID(name, lower_case, count) \
    case Runtime::kInline##name:               \
        return IntrinsicId::k##name;
                INTRINSICS_LIST(TO_RUNTIME_ID)
#undef TO_RUNTIME_ID
            default:
                UNREACHABLE();
            }
        }

        // static
        Runtime::FunctionId IntrinsicsHelper::ToRuntimeId(
            IntrinsicsHelper::IntrinsicId intrinsic_id)
        {
            switch (intrinsic_id) {
#define TO_INTRINSIC_ID(name, lower_case, count) \
    case IntrinsicId::k##name:                   \
        return Runtime::kInline##name;
                INTRINSICS_LIST(TO_INTRINSIC_ID)
#undef TO_INTRINSIC_ID
            default:
                UNREACHABLE();
            }
        }

    } // namespace interpreter
} // namespace internal
} // namespace v8
